﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
//using AcessaDadosBD;
//using AcessaDadosBD.Repositorios;
using System.Data;
using System.Data.OleDb;
using System.IO;

namespace TestProject
{
    [TestClass]
    public class RepositoryUnitTest
    {
        //private OleDbCommand cmd;

        //[TestInitialize]
        //public void Initialize()
        //{
        //    OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\marcus.barizon\Desktop\pasta\LTIA\Projetos\DocTiss\Projeto\docTissBDv2.accdb");

        //    cmd = new OleDbCommand();
        //    cmd.Connection = connection;
        //}

        //[TestMethod]
        //public void TestMethodGuiaRepository()
        //{
        //    GuiaFaturamentoRepository repositorioGuia = new GuiaFaturamentoRepository(cmd);

        //    GuiaFaturamento novaGuia = new GuiaFaturamento()
        //    {
        //        NumeroGuia = "12345678900987654321",
        //        Local = "C:\\",
        //        IDLoteGuia = 1
        //    };

        //    int codigoRetorno = repositorioGuia.Insert(novaGuia);
        //}

        ////OK
        ///// <summary>
        ///// Testa a classe de repositorio do prestador
        ///// </summary>
        //[TestMethod]
        //public void TestMethodPrestadorRepository()
        //{
        //    PrestadorRepository prestadorRepository = new PrestadorRepository(cmd);
        //    //insere dados para os testes
        //    Prestador prestador = new Prestador()
        //    {
        //        Nome="testePrestador",
        //        CEP="123456"
        //    };

        //    int codigoRetorno = prestadorRepository.Insert(prestador);

        //    Prestador prestadorCriado = prestadorRepository.GetById(codigoRetorno);

        //    Assert.AreEqual(prestador.Nome, prestadorCriado.Nome);
        //    Assert.AreEqual(prestador.CEP, prestadorCriado.CEP);

        //    prestadorCriado.Nome = "testePrestadorAtualizado";
        //    prestadorCriado.CEP = "654321";
        //    prestadorCriado.CodigoUF = "SP";

        //    prestadorRepository.Update(prestadorCriado);

        //    Prestador prestadorAtualizado = prestadorRepository.GetById(codigoRetorno);

        //    Assert.AreEqual(prestadorCriado.ID, prestadorAtualizado.ID);
        //    Assert.AreEqual(prestadorCriado.Nome, prestadorAtualizado.Nome);
        //    Assert.AreEqual(prestadorCriado.CEP, prestadorAtualizado.CEP);
        //    Assert.AreEqual(prestadorCriado.CodigoUF, prestadorAtualizado.CodigoUF);

        //    prestadorRepository.Delete(prestadorAtualizado);

        //    bool hasException = false;
        //    try
        //    {
        //        Prestador p = prestadorRepository.GetById(codigoRetorno);
        //    }
        //    catch (Exception)
        //    {
        //        hasException = true;
        //    }

        //    Assert.IsTrue(hasException);
        //}

        ///// <summary>
        ///// Testa a classe de repositorio de Login
        ///// </summary>
        //[TestMethod]
        //public void TestMethodLoginRepository()
        //{
        //    PrestadorRepository prestadorRepository = new PrestadorRepository(cmd);

        //    Prestador prestador = new Prestador()
        //    {
        //        Nome = "testePrestador"
        //    };

        //    int codigoRetorno = prestadorRepository.Insert(prestador);

        //    LoginRepository loginRepository = new LoginRepository(cmd);

        //    Login login = new Login()
        //    {
        //        ID = codigoRetorno,
        //        Usuario = "Teste01",
        //        Senha = "123"
        //    };

        //    codigoRetorno = loginRepository.Insert(login);

        //    //Assert.AreEqual(codigoRetorno, login.ID);

        //    Login loginCriado = loginRepository.GetById(codigoRetorno);

        //    Assert.AreEqual(login.ID, loginCriado.ID);
        //    Assert.AreEqual(login.Usuario, loginCriado.Usuario);
        //    Assert.AreEqual(login.Senha, loginCriado.Senha);

        //    loginCriado.Usuario = "Teste01 editado";

        //    loginRepository.Update(loginCriado);

        //    // falta terminar esse teste

        //    //recupera o login atualizado
        //    Login loginAtualizado = loginRepository.GetById(codigoRetorno);

        //    Assert.AreEqual(loginAtualizado.ID, loginCriado.ID);
        //    Assert.AreEqual(loginAtualizado.Usuario, loginCriado.Usuario);
        //    Assert.AreEqual(loginAtualizado.Senha, loginCriado.Senha);

        //    //remove o login do banco

        //    loginRepository.Delete(loginAtualizado);

        //    //tenta recupera o login do banco
        //    bool hasException = false;
        //    try
        //    {
        //        Login l = loginRepository.GetById(codigoRetorno);
        //    }
        //    catch (Exception)
        //    {
        //        hasException = true;
        //    }

        //    Assert.IsTrue(hasException);
        //}

        ///// <summary>
        ///// Testa a classe de repositorio da Clinica/Hospital
        ///// </summary>
        //[TestMethod]
        //public void TestMethodClinicaHospitalRepository()
        //{
        //    PrestadorRepository prestadorRepository = new PrestadorRepository(cmd);

        //    Prestador prestador = new Prestador()
        //    {
        //        Nome = "testePrestador_Clinica"
        //    };

        //    int codigoRetorno = prestadorRepository.Insert(prestador);

        //    ClinicaHospitalRepository chRepository = new ClinicaHospitalRepository(cmd);

        //    ClinicaHospital clinicaHospital = new ClinicaHospital()
        //    {
        //        ID = codigoRetorno,
        //        CNES="1a2b3"
        //    };

        //    codigoRetorno = chRepository.Insert(clinicaHospital);

        //    ClinicaHospital clinicaCriada = chRepository.GetById(codigoRetorno);

        //    Assert.IsNotNull(clinicaCriada.ID);
        //    Assert.AreEqual(clinicaHospital.CNES, clinicaCriada.CNES);

        //    clinicaCriada.CNES = "4d3c2";

        //    chRepository.Update(clinicaCriada);

        //    ClinicaHospital clinicaAtualizada = chRepository.GetById(codigoRetorno);

        //    Assert.AreEqual(clinicaAtualizada.CNPJ, clinicaCriada.CNPJ);

        //    bool hasException = false;
        //    chRepository.Delete(clinicaAtualizada);

        //    try
        //    {
        //        ClinicaHospital ch = chRepository.GetById(codigoRetorno);
        //    }
        //    catch (Exception)
        //    {
        //        hasException = true;
        //    }

        //    Assert.IsTrue(hasException);
        //}

        //[TestMethod]
        //public void TestMethodProfissionalRepository()
        //{
        //    PrestadorRepository prestadorRepository = new PrestadorRepository(cmd);

        //    Prestador prestador = new Prestador()
        //    {
        //        Nome = "testePrestador_Profissonal"
        //    };

        //    int codigoRetorno = prestadorRepository.Insert(prestador);

        //    ProfissionalRepository profissionalRepository = new ProfissionalRepository(cmd);


        //    Profissional profissional = new Profissional()
        //    {
        //        ID = codigoRetorno,
        //        CPF = "12345657",
        //        SiglaConselho="SP"
        //    };

        //    codigoRetorno = profissionalRepository.Insert(profissional);

        //    Assert.AreEqual(codigoRetorno, profissional.ID);

        //    Profissional profissionalCriado = profissionalRepository.GetById(codigoRetorno);

        //    profissionalCriado.CPF = "7654321";
        //    profissionalCriado.SiglaConselho = "PS";

        //    profissionalRepository.Update(profissionalCriado);

        //    Profissional profissionalAtualizado = profissionalRepository.GetById(codigoRetorno);

        //    Assert.AreEqual(profissionalAtualizado.CPF, profissionalCriado.CPF);
        //    Assert.AreEqual(profissionalAtualizado.SiglaConselho, profissionalCriado.SiglaConselho);

        //    bool hasException = false;
        //    profissionalRepository.Delete(profissionalAtualizado);

        //    try
        //    {
        //        Profissional p = profissionalRepository.GetById(codigoRetorno);
        //    }
        //    catch (Exception)
        //    {
        //        hasException = true;
        //    }

        //    Assert.IsTrue(hasException);
        //}

        //[TestMethod]
        //public void TestMethodOperadoraRepository()
        //{
        //    string registro = "321489";

        //    Operadora operadora = new Operadora();
        //    operadora.RegistroANS = registro;
        //    operadora.Nome = "OperadoraGoogle";

        //    string sPathToFileToSave = @"C:\Users\marcus.barizon\Desktop\pasta\LTIA\Projetos\DocTiss\Projeto\logoGoogle.jpg";
        //    byte[] fileData = null;

        //    using (FileStream fs = new FileStream(sPathToFileToSave, FileMode.Open, FileAccess.Read))
        //    {
        //        fileData = new byte[fs.Length];
        //        fs.Read(fileData, 0, System.Convert.ToInt32(fs.Length));
        //        fs.Close();
        //    }

        //    operadora.Logo = fileData;
        //    OperadoraRepository operadoraRepository = new OperadoraRepository(cmd);

        //    int reg = operadoraRepository.Insert(operadora);

        //    Assert.AreEqual(0, reg);
        //    Operadora operadoraCriada = operadoraRepository.GetById(registro);

        //    Assert.AreEqual(operadora.RegistroANS, operadoraCriada.RegistroANS);
        //    Assert.AreEqual(operadora.Nome, operadoraCriada.Nome);

        //    operadoraCriada.Nome = "OperadoraGoogle6";

        //    string sPathToFileToUpdate = @"C:\Users\marcus.barizon\Desktop\pasta\LTIA\Projetos\DocTiss\Projeto\logoApple.jpg";
        //    fileData = null;

        //    using (FileStream fs = new FileStream(sPathToFileToUpdate, FileMode.Open, FileAccess.Read))
        //    {
        //        fileData = new byte[fs.Length];
        //        fs.Read(fileData, 0, System.Convert.ToInt32(fs.Length));
        //        fs.Close();
        //    }

        //    operadoraCriada.Logo = fileData;
        //    operadoraRepository.Update(operadoraCriada);

        //    Operadora operadoraAtualizada = operadoraRepository.GetById(registro);

        //    Assert.AreEqual(operadoraAtualizada.Nome, operadoraCriada.Nome);

        //    using (FileStream fsW = new FileStream(@"C:\Users\marcus.barizon\Desktop\pasta\LTIA\Projetos\DocTiss\Projeto\logoApple5.jpg", FileMode.OpenOrCreate, FileAccess.Write))
        //    {
        //        fsW.Write(operadoraAtualizada.Logo, 0, operadoraAtualizada.Logo.Length);
        //    }
        //    operadoraRepository.Delete(operadoraAtualizada);

        //    bool hasException = false;
        //    try
        //    {
        //        Operadora op = operadoraRepository.GetById(registro);
        //    }
        //    catch (Exception)
        //    {
        //        hasException = true;
        //    }

        //    Assert.IsTrue(hasException);
        //}

        //[TestMethod]
        //public void TestMethodLoteGuiaRepository()
        //{
        //    LoteGuiaRepository loteGuiaRepository = new LoteGuiaRepository(cmd);
        //    PrestadorRepository prestadorRepository = new PrestadorRepository(cmd);
        //    OperadoraRepository operadoraRepository = new OperadoraRepository(cmd);

        //    Prestador prestador = new Prestador()
        //    {
        //        Nome = "testePrestador"
        //    };

        //    int codigoPrestador = prestadorRepository.Insert(prestador);

        //    Operadora operadora = new Operadora()
        //    {
        //        RegistroANS="123457"
        //    };

        //    operadoraRepository.Insert(operadora);

        //    LoteGuia loteGuia = new LoteGuia()
        //    {
        //        RegistroANS = operadora.RegistroANS,
        //        Prestador = codigoPrestador,
        //        NumeroLote="5",
        //        TipoGuia = TipoGuia.Consulta
        //    };

        //    int codigoLoteGuia =  loteGuiaRepository.Insert(loteGuia);

        //    LoteGuia loteGuiaCriada = loteGuiaRepository.GetById(codigoLoteGuia);

        //    Assert.AreEqual(loteGuia.NumeroLote, loteGuiaCriada.NumeroLote);
        //    Assert.AreEqual(loteGuia.RegistroANS, loteGuiaCriada.RegistroANS);
        //    Assert.AreEqual(loteGuia.Prestador, loteGuiaCriada.Prestador);

        //    loteGuiaCriada.NumeroLote = "10";

        //    loteGuiaRepository.Update(loteGuiaCriada);

        //    LoteGuia loteGuiaAtualizada = loteGuiaRepository.GetById(codigoLoteGuia);

        //    Assert.AreEqual(loteGuiaCriada.NumeroLote, loteGuiaAtualizada.NumeroLote);

        //    bool hasException = false;
        //    loteGuiaRepository.Delete(loteGuiaAtualizada);

        //    try
        //    {
        //        LoteGuia lg = loteGuiaRepository.GetById(codigoLoteGuia);
        //    }
        //    catch (Exception)
        //    {
        //        hasException = true;
        //    }

        //    Assert.IsTrue(hasException);
        //}


    }
}
